// ScreenCapture.cpp : main source file for ScreenCapture.exe
//

#include "stdafx.h"
#include <xcommonfunc.h>
#include "resource.h"
#include "MainDlg.h"

CAppModule _Module;
#define CAPTURE	L"/capture"
#define XIGUAN	L"/xiguan"

int Run(LPTSTR lpstrCmdLine = NULL, int nCmdShow = SW_SHOWDEFAULT)
{
	CMessageLoop theLoop;
	_Module.AddMessageLoop(&theLoop);


	LPWSTR *	szArglist = NULL;
	int			nArgs = 0	;

	szArglist = CommandLineToArgvW(lpstrCmdLine, &nArgs);

	LPWSTR pszParam = NULL;
	if (nArgs <= 1)
	{
		pszParam = szArglist[0];
	}
	else
	{
		pszParam = szArglist[1];
	}

	RUN_TYPE eType = RT_CAPTURE;
	if (!_tcscmp(pszParam, CAPTURE))
	{
		eType = RT_CAPTURE;
	}
	else if (!_tcscmp(pszParam, XIGUAN))
	{
		eType = RT_XIGUAN;
	}
	else
	{
		return 0;
	}

	CMainDlg dlgMain(eType);

	if(dlgMain.Create(NULL) == NULL)
	{
		ATLTRACE(_T("Main dialog creation failed!\n"));
		return 0;
	}

	dlgMain.ShowWindow(nCmdShow);

	int nRet = theLoop.Run();

	_Module.RemoveMessageLoop();
	return nRet;
}

int WINAPI _tWinMain(HINSTANCE hInstance, HINSTANCE /*hPrevInstance*/, LPTSTR lpstrCmdLine, int nCmdShow)
{
	HRESULT hRes = ::CoInitialize(NULL);
// If you are running on NT 4.0 or higher you can use the following call instead to 
// make the EXE free threaded. This means that calls come in on a random RPC thread.
//	HRESULT hRes = ::CoInitializeEx(NULL, COINIT_MULTITHREADED);
	ATLASSERT(SUCCEEDED(hRes));

	// this resolves ATL window thunking problem when Microsoft Layer for Unicode (MSLU) is used
	::DefWindowProc(NULL, 0, 0, 0L);

	AtlInitCommonControls(ICC_BAR_CLASSES);	// add flags to support other controls

	TCHAR szFileName[MAX_PATH] = {0};
	::GetModuleFileName(_Module.m_hInst, szFileName, MAX_PATH);
	TCHAR * pFileName = ::PathFindFileName(szFileName);

	CString strFile = pFileName;
	if (IsProcessExist(strFile))
	{
		return 0;
	}

	hRes = _Module.Init(NULL, hInstance);
	ATLASSERT(SUCCEEDED(hRes));

	int nRet = Run(lpstrCmdLine, nCmdShow);

	_Module.Term();
	::CoUninitialize();

	return nRet;
}
